package main

/**
 * @title 主函数
 *
 * @author wz
 *
 * @date 2025/10/23 14:13
 *
 * @version 1.0
 */

import (
	"fmt"
	"log"
	"test-gin/config"
	"test-gin/internal/route"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func main() {
	cfg := config.LoadConfig()
	db := initDB(cfg)
	r := route.SetupRouter(db)
	fmt.Printf("服务启动在 %s 模式，端口: %s\n", cfg.App.Env, cfg.App.Port)
	log.Fatal(r.Run(cfg.App.Port))
}

func initDB(cfg *config.Config) *gorm.DB {
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		cfg.Database.User,
		cfg.Database.Password,
		cfg.Database.Host,
		cfg.Database.Port,
		cfg.Database.DBName,
	)

	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatalf("数据库连接失败: %v", err)
	}

	sqlDB, _ := db.DB()
	sqlDB.SetMaxIdleConns(10)
	sqlDB.SetMaxOpenConns(cfg.Database.MaxConnections)
	sqlDB.SetConnMaxLifetime(30 * time.Minute)
	return db
}
